package com.java.jvm;

interface IA{
    void a();
    default void b(){

    };
    static void c(){}
}



/**
 * 系统中的类加载器分析
 * 1)不同类加载器有不同类加载职责
 * 2)如何获取这些常用的类加载器？
 *
 * 如何知道哪些类在类加载会加载到内存
 * -XX:+TraceClassLoading
 */
public class ClassLoaderTests {

    public static void main(String[] args) {

        //1.AppClassLoader (应用加载器，默认加载ClassPath路径中的类-大部分是我们自己写的类)
        ClassLoader appClassLoader =
                ClassLoader.getSystemClassLoader();
        System.out.println(appClassLoader);

        //2.ExtClassLoader(扩展类加载器，负责加载ext包中的类)
        ClassLoader extClassLoader = appClassLoader.getParent();
        System.out.println(extClassLoader);//JDK17中是PlatformClassLoader

        //3.BootStrapClassLoader(根类加载器，负责加载基础类库中的类-rt.jar)
        ClassLoader bootStrapClassLoader=extClassLoader.getParent();
        System.out.println(bootStrapClassLoader);//null->BootStrapClassLoader (使用C语言编写)

        //String类的类加载器是什么？
        ClassLoader classLoader = String.class.getClassLoader();
        System.out.println(classLoader);//null ->BootstrapClassLoader

        //获取当类ClassLoaderTests的类加载器
        classLoader=ClassLoaderTests.class.getClassLoader();
        System.out.println(classLoader);//AppClassLoader
    }
}
